package com.ddwl.user.service;

import com.ddwl.common.util.BeanConverUtils;
import com.ddwl.common.util.MySqlUtil;
import com.ddwl.schema.bo.base.PageBo;
import com.ddwl.schema.bo.user.LoginLogPageBo;
import com.ddwl.schema.util.DateUtil;
import com.ddwl.schema.vo.base.PageVo;
import com.ddwl.schema.vo.user.LoginLogVo;
import com.ddwl.user.dao.LoginLogDao;
import com.ddwl.user.dao.model.LoginLog;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.time.Instant;
import java.util.List;

/**
 * @Author hemiaojun
 * @Date 2020/9/15 19:22
 */
@Slf4j
@Service
public class LoginLogService {

    @Resource
    private LoginLogDao loginLogDao;

    @Transactional(rollbackFor = Exception.class)
    public void save(LoginLog loginLog) {
        loginLogDao.insert(loginLog);
    }

    public boolean isHaveByUserId(String userId){
        Integer count=loginLogDao.getCountByUserId(userId);
        if (null != count && count > 0) {
            return Boolean.TRUE;
        }
        return Boolean.FALSE;
    }

    public Boolean firstLogin(String userId) {
        LoginLog loginLog = new LoginLog();
        loginLog.setUserId(userId);
        loginLog.setFirstLogin((byte)1);
        loginLog.setOperateTime(DateUtil.addDay(Instant.now(),-3));
        LoginLog exist=loginLogDao.getFirstLogin(loginLog);
        if(null!=exist){
            return Boolean.TRUE;
        }
        return Boolean.FALSE;
    }

    public PageVo<LoginLogVo> consolePage(PageBo<LoginLogPageBo> pageBo) {
        PageHelper.startPage(pageBo.getPage(), pageBo.getPageSize(), MySqlUtil.orderBy(pageBo.getSort(), pageBo.isAsc()));
        PageInfo<LoginLog> info = new PageInfo<>(loginLogDao.getList(pageBo.getParam()));
        List<LoginLogVo> list = BeanConverUtils.convertBeanList(info.getList(), LoginLogVo.class);
        return new PageVo<>(info.getTotal(), pageBo.getPage(), pageBo.getPageSize(), list);
    }
}
